package wei.qiang.ye.dynamicdatasourceshardingjdbc02.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import wei.qiang.ye.dynamicdatasourceshardingjdbc02.domain.OrderDO;
import wei.qiang.ye.dynamicdatasourceshardingjdbc02.mapper.OrderMapper;

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Transactional
    public void add(OrderDO order) {
        // 读取从库 在 Sharding-JDBC 的读写分离策略里，默认读取从库。
        OrderDO exists = orderMapper.selectById(1);
        System.out.println(exists);

        //插入订单  写入，肯定是操作主库的
        orderMapper.insert(order);

        // 读取主库 在 Sharding-JDBC 中，读写分离约定：同一线程且同一数据库连接内，
        // 如有写入操作，以后的读操作均从主库读取，用于保证数据一致性。
        exists = orderMapper.selectById(1);
        System.out.println(exists);
    }

    /**
     * 往从库发起一次订单查询
     * @param id
     * @return
     */
    public OrderDO findById(Integer id) {
        return orderMapper.selectById(id);
    }

}
